using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Graphics;
using Microsoft.Xna.Framework.Content;

namespace Perovich.GameObjects.Interfaces
{
    /// <summary>
    /// Exposes the requirements for supporting a collection of <see cref="Component"/>s and <see cref="DrawableComponent"/>s.
    /// </summary>
    /// <remarks>
    ///     Types implementing this interface must also provide Initialize, Update, and Draw events in a game loop at the minimum to function.
    /// </remarks>
    public interface ICanHoldComponents : ICanSupportComponents
    {
        
        /// <summary>
        /// Gets the collection of components this <see cref="ICanHoldComponents"/> manages.
        /// </summary>
        ComponentCollection Components { get; }
        /// <summary>
        /// Triggered whenever the <see cref="SBatches"/> property is changed.
        /// </summary>
        event EventHandler<EventArgs> SpriteBatchSet;
        /// <summary>
        /// Gets or sets the <see cref="SpriteBatch"/> used to draw this <see cref="ICanHoldComponents"/>.
        /// </summary>
        SpriteBatchCollection SBatches { get; set; }
        /// <summary>
        /// Gets the <see cref="ContentManager"/> associated with this <see cref="ICanHoldComponents"/>.
        /// </summary>
        ContentManager Content { get; }

    }
}
